package types

import "time"

// ===========================================
// 进程网络连接明细相关结构体
// ===========================================

// ProcessConnection 进程网络连接信息
type ProcessConnection struct {
	PID         int32  `json:"pid"`
	ProcessName string `json:"process_name"`
	Protocol    string `json:"protocol"`
	LocalAddr   string `json:"local_addr"`
	LocalPort   int    `json:"local_port"`
	RemoteAddr  string `json:"remote_addr"`
	RemotePort  int    `json:"remote_port"`
	Status      string `json:"status"`
	Inode       string `json:"inode"`
	// 流量统计字段
	BytesSent uint64 `json:"bytes_sent"` // 发送字节数
	BytesRecv uint64 `json:"bytes_recv"` // 接收字节数
	// 实时速度字段
	SpeedUp   float64 `json:"speed_up"`   // 上传速率 Mbps
	SpeedDown float64 `json:"speed_down"` // 下载速率 Mbps
	// 格式化字符串字段
	BytesSentText string `json:"bytes_sent_text"`
	BytesRecvText string `json:"bytes_recv_text"`
	SpeedUpText   string `json:"speed_up_text"`
	SpeedDownText string `json:"speed_down_text"`
}

// ProcessInfo 进程基本信息
type ProcessInfo struct {
	PID              int32  `json:"pid"`
	ProcessName      string `json:"process_name"`
	Executable       string `json:"executable"`
	Username         string `json:"username"`
	IsAlive          bool   `json:"is_alive"`
	TotalConnections int    `json:"total_connections"`
	ActiveTCP        int    `json:"active_tcp"`
	ActiveUDP        int    `json:"active_udp"`
	ListeningPorts   []int  `json:"listening_ports"`
	TotalSent        uint64 `json:"total_sent"`
	TotalRecv        uint64 `json:"total_recv"`
	// 实时速度字段
	SpeedUp   float64 `json:"speed_up"`   // 上传速率 Mbps
	SpeedDown float64 `json:"speed_down"` // 下载速率 Mbps
	// 格式化字符串字段
	TotalSentText string `json:"total_sent_text"`
	TotalRecvText string `json:"total_recv_text"`
	SpeedUpText   string `json:"speed_up_text"`   // 如: "1.2 Mbps"
	SpeedDownText string `json:"speed_down_text"` // 如: "3.4 Mbps"
}

// ProcessConnSummary 单个进程连接汇总
type ProcessConnSummary struct {
	TCPConnections         int   `json:"tcp_connections"`
	UDPConnections         int   `json:"udp_connections"`
	ListeningPorts         []int `json:"listening_ports"`
	EstablishedConnections int   `json:"established_connections"`
}

// ===========================================
// 进程流量计算相关结构体
// ===========================================

// ProcessTrafficSnapshot 进程流量快照（用于速度计算）
type ProcessTrafficSnapshot struct {
	PID       int32     `json:"pid"`
	Timestamp time.Time `json:"timestamp"`
	TotalSent uint64    `json:"total_sent"`
	TotalRecv uint64    `json:"total_recv"`
}

// ProcessTrafficCache 进程流量缓存（用于速度计算）
type ProcessTrafficCache struct {
	Previous *ProcessTrafficSnapshot `json:"previous"`
	Current  *ProcessTrafficSnapshot `json:"current"`
}

// ProcessSpeedStats 进程速度统计（个单进程的详细速度数据）
type ProcessSpeedStats struct {
	PID               int32   `json:"pid"`
	ProcessName       string  `json:"process_name"`
	DownloadSpeedBps  float64 `json:"download_speed_bps"`
	UploadSpeedBps    float64 `json:"upload_speed_bps"`
	DownloadSpeedMbps float64 `json:"download_speed_mbps"`
	UploadSpeedMbps   float64 `json:"upload_speed_mbps"`
	LastUpdate        string  `json:"last_update"`
	// 格式化字符串字段
	DownloadSpeedText string `json:"download_speed_text"`
	UploadSpeedText   string `json:"upload_speed_text"`
}

// ===========================================
// API响应相关结构体
// ===========================================

// ProcessAPIResponse 进程监控API标准响应
type ProcessAPIResponse struct {
	Success bool        `json:"success"`
	Data    interface{} `json:"data,omitempty"`
	Error   string      `json:"error,omitempty"`
	Count   int         `json:"count,omitempty"`
}

// ===========================================
// 分页相关结构体
// ===========================================

// PageRequest 分页请求参数
type PageRequest struct {
	Page     int `json:"page" form:"page"`           // 页码，从1开始
	PageSize int `json:"page_size" form:"page_size"` // 每页大小
}

// PageInfo 分页信息
type PageInfo struct {
	Page       int  `json:"page"`        // 当前页码
	PageSize   int  `json:"page_size"`   // 每页大小
	Total      int  `json:"total"`       // 总记录数
	TotalPages int  `json:"total_pages"` // 总页数
	HasPrev    bool `json:"has_prev"`    // 是否有上一页
	HasNext    bool `json:"has_next"`    // 是否有下一页
}

// ProcessConnectionsPageResponse 分页的进程连接响应
type ProcessConnectionsPageResponse struct {
	Connections []ProcessConnection `json:"connections"`
	PageInfo    PageInfo            `json:"page_info"`
	Count       int                 `json:"count"`
}

// ProcessListPageResponse 分页的进程列表响应
type ProcessListPageResponse struct {
	Processes []ProcessInfo `json:"processes"`
	PageInfo  PageInfo      `json:"page_info"`
	Count     int           `json:"count"`
}

// ===========================================
// SSE推送相关结构体
// ===========================================

// ProcessSSEData SSE推送的进程数据
type ProcessSSEData struct {
	Processes       []ProcessInfo           `json:"processes"`
	Count           int                     `json:"count"`
	Timestamp       string                  `json:"timestamp"`
	MonitoringStats *ProcessMonitoringStats `json:"monitoring_stats,omitempty"`
}

// ===========================================
// 兼容性类型别名（用于平滑迁移）
// ===========================================

// ProcessNetStats 兼容性别名，指向ProcessInfo
type ProcessNetStats = ProcessInfo
